package com.sfx.concurrent.demo.concurrent.DCL.demo2;

/**
 * DCL懒汉模式
 */
public final class Singleton {
    private Singleton() { }
    // 问题1：解释为什么要加 volatile ?
    private static volatile Singleton INSTANCE = null;
    // 问题2：对比实现3, 说出这样做的意义
    public static Singleton getInstance() {
    if (INSTANCE != null) {
        return INSTANCE;
    }
    synchronized (Singleton.class) {
        // 问题3：为什么还要在这里加为空判断, 之前不是判断过了吗
        if (INSTANCE != null) { // t2
            return INSTANCE;
        }
         INSTANCE = new Singleton();
            return INSTANCE;
        }
    }
}
